Telegram Group Search
🧵 Как упростить отладку Python-скриптов с помощью breakpoint()

Привет! Сегодня хочу поделиться небольшим, но очень полезным трюком, который многие почему-то упускают — встроенная функция breakpoint().

С версии Python 3.7 и выше ты можешь просто вставить breakpoint() в нужное место кода, и он сразу остановится, запустив интерактивный отладчик. По умолчанию это pdb, но можно переопределить через переменную окружения PYTHONBREAKPOINT.

Пример:


def calculate(x, y):
result = x * y
breakpoint()
return result + 1

calculate(3, 5)


В момент вызова breakpoint() ты окажешься прямо в интерактивной сессии: можно смотреть переменные, шагать по коду и т.д.

🔥 Почему это удобно:

* Не нужно импортировать pdb вручную
* Работает в любом месте — в скриптах, Django-представлениях, Flask-хендлерах
* Легко отключается: запусти скрипт с PYTHONBREAKPOINT=0, и breakpoint() будет просто игнорироваться

Пользуетесь ли вы этой фичей в повседневной работе? Или все еще вставляете print()? 😄

Подписывайтесь на канал 👉@pythonofff
Использование цикла

В этом коде мы вызываем функцию для обращения строки, которая повторяется для каждого элемента и интересным способом присоединяет каждый символ к началу, чтобы получить обратную строку.

Подписывайтесь на канал 👉@pythonofff
Сортировка словаря по значениям

Сортировка данных словаря по значениям ключей, а не по самим ключам, нередко ставит в тупик.

Задача решается довольно просто при помощи аргумента key функции sorted для указания функции, которая будет вызываться на каждом элементе до сравнения.

Подписывайтесь на канал 👉@pythonofff
Функция zip

Функция zip создаёт итератор, который комбинирует элементы нескольких списков. Это позволяет осуществлять параллельный обход списков в циклах for или, например, выполнять параллельную сортировку.

Подписывайтесь на канал 👉@pythonofff
Возведение в квадрат всех чисел в заданном диапазоне

В этом фрагменте для нахождения квадрата каждого целого числа в заданном диапазоне прибегнем к помощи встроенной функции itertools

Подписывайтесь на канал 👉@pythonofff
Функция reduce

Модуль functools позволяет хорошо раскрыть функциональные возможности Python. Например, в functools есть интересная функция reduce, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.

Таким образом, в примере выше reduce умножает 1 на 2, затем результат этого умножения на 3 и так далее.

Подписывайтесь на канал 👉@pythonofff
Создание словаря из набора ключей

Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).

Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.

Подписывайтесь на канал 👉@pythonofff
Считываем бинарный файл со строковыми данными в массив

Бинарный файл содержит список с числовыми данными. Функция open() открывает файл и читает из него данные. Затем из бинарника читаются первые 5 чисел и перед выводом объединяются в список.

Подписывайтесь на канал 👉@pythonofff
Символы Юникода

Добавлять юникод-символы в строковые литералы можно не только с помощью их номеров, но и по их названиям.

Более того, такая запись символов юникода совместима и с f-строками, а это очень удобно.

Подписывайтесь на канал 👉@pythonofff
Примитивный метод удаления символа из строки

Суть этого метода проста. Мы пишем цикл и создаем новую пустую строку. Цикл работает так: все символы кроме элемента с индексом n помещаются в новую строку. (n — индекс элемента, который нам нужно удалить)

Подписывайтесь на канал 👉@pythonofff
Считываем бинарный файл со строковыми данными в массив байтов

Функция open() открывает для чтения string.bin, а функция read() на каждой итерации цикла while считывает по 7 символов в файле и выводит их. Далее мы используем функцию read() еще раз, но уже без аргументов — для считывания всего файла. После считывания содержимое выводится на экран.

Подписывайтесь на канал 👉@pythonofff
Инкремент с помощью __pos__

В Python нет операции инкремента ++ как в си-подобных языках, поэтому используется x += 1. Однако запись ++x является валидным кодом (но не x++), так как это просто два унарных оператора сложения.

При применении унарного плюса у объекта вызывается магический метод __pos__, то есть запись ++x можно понять как x.__pos__().__pos__(). Зная это, можно реализовать класс, который будет представлять число и поддерживать поведение инкремента.

Код на картинке может показаться сначала немного сложным, но лучше проследить логику и понять работу метода __pos__. Если реализовать все остальные необходимо магические методы, то может получится полноценный класс числа, но в продакшне такие приколы лучше не писать.

Подписывайтесь на канал 👉@pythonofff
Избавляемся от вложенных циклов с помощью функции product

Вложенные циклы — настоящая головная боль. Они усложняют не только сам код, но и его читаемость. Выход из этих циклов — задача тоже сложная. Чтобы найти ошибку, приходится приложить много усилий, ведь нужно проверить каждый внутренний цикл.

К счастью, существует очень полезная встроенная функция — product. Она является частью встроенного модуля Python — itertools. С ее помощью мы можем избавиться от вложенных циклов.

Подписывайтесь на канал 👉@pythonofff
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟

Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?

После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.

Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
Дробные числа

По умолчанию числа с плавающей точкой используют память привычным образом, то есть они хранятся в двоичном виде. Это означает, что вы обычно работаете с приблизительными значениями, а не точными.

Можно использовать тип данных Decimal, который предоставит намного большую точность, но и его может не хватить в некоторых случаях.

Поэтому для идеальных вычислений лучше использовать Fraction, который представляет и хранит число в виде рациональной дроби.

Подписывайтесь на канал 👉@pythonofff
Новый оператор объединения словарей

В Python есть много разных способов объединить несколько словарей. Мне, например, больше всего нравилась распаковка словарей в один новый.

Но в последнем обновлении добавили специальный оператор |, с помощью которого можно это делать ещё проще.

Подписывайтесь на канал 👉@pythonofff
Проектирование Singleton с использованием метакласса

Данный шаблон проектирования ограничивает создание экземпляра класса только одним объектом. Это может оказаться полезным, например, при разработке класса для подключения к базе данных. Возможно, вы захотите иметь только один экземпляр класса соединения.

Подписывайтесь на канал 👉@pythonofff
Смягчение грамматических ограничений декораторов

Ещё один приятный момент из недавнего обновления связан с декораторами. В целом, нового здесь немного, но появилась возможность слегка упросить код.

Изменение позволило заметно улучшить читаемость кода на PyQt5 и упростить сопровождение данного модуля.

Подписывайтесь на канал 👉@pythonofff
__new__ и __init__

new используется, когда нужно определить кортежи dict или base перед созданием класса. Возвращаемое значение new обычно является экземпляром cls. new позволяет подклассам неизменяемых типов настраивать создание экземпляров. Его можно переопределить в пользовательских метаклассах, чтобы настроить создание класса.

init обычно вызывается после создания объекта для его инициализации.

Подписывайтесь на канал 👉@pythonofff
Находим соответствия в строках

В стандартной библиотеке Python существует модуль difflib, в котором есть интересный метод get_close_matches. Он позволяет найти в списке строки, похожие на некую исходную.

Данный метод ищет "наилучшие" возможные совпадения. Первый аргумент задаёт искомую строку, второй аргумент – список, в котором выполняется поиск.

Также в метод можно передать необязательный аргумент n, который задаёт максимальное число возвращаемых совпадений.

Подписывайтесь на канал 👉@pythonofff
2025/06/18 09:45:54
Back to Top
HTML Embed Code: